<?php
/**
 * Static content controller.
 *
 * This file will render views from views/pages/
 *
 * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
 * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 *
 * Licensed under The MIT License
 * For full copyright and license information, please see the LICENSE.txt
 * Redistributions of files must retain the above copyright notice.
 *
 * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 * @link          http://cakephp.org CakePHP(tm) Project
 * @package       app.Controller
 * @since         CakePHP(tm) v 0.2.9
 * @license       http://www.opensource.org/licenses/mit-license.php MIT License
 */

App::uses('AppController', 'Controller');

/**
 * Static content controller
 *
 * Override this controller by placing a copy in controllers directory of an application
 *
 * @package       app.Controller
 * @link http://book.cakephp.org/2.0/en/controllers/pages-controller.html
 */
class GraphsController extends AppController {

/**
 * This controller does not use a model
 *
 * @var array
 */
	public $uses = array();

	public function index($id = null) {		
		if (!$id) {
			$this->Session->setFlash('Selecione uma criança.', 'default', array('class' => 'error'));
			//$this->redirect(array('controller' => 'pages', 'action' => 'index'));
		}
		
		$padroesA = $this->Graph->query(
				"SELECT * FROM 
				padroes_crescimento 
				WHERE
					idade <= (select max(idade) from medicoes where bebe = ".$id.") and
					sexo = (select sexo from bebes where id = ".$id.") and 
					tipo = 'A' 
				order by 
					idade");
		
		$padroesP = $this->Graph->query("
				SELECT * FROM 
				padroes_crescimento 
				WHERE 
					idade <= (select max(idade) from medicoes where bebe = ".$id.") and
					sexo = (select sexo from bebes where id = ".$id.") and
					tipo = 'P'
				order by 
					idade");
		
		$medicoes = $this->Graph->query("SELECT * FROM medicoes where bebe = ".$id." order by idade");
		
		$this->set('padroesA', $padroesA);
		$this->set('padroesP', $padroesP);
		$this->set('medicoes', $medicoes);
		
		$sql = "SELECT M.ALTURA, M.PESO, M.IDADE, B.SEXO " .
				"FROM MEDICOES M " .
				"JOIN BEBES B ON M.BEBE = B.ID ".
				"WHERE B.ID = $id ORDER BY M.IDADE DESC LIMIT 1";
		
		$result = $this->Graph->query($sql, $cachequeries = false);

		$sql = "SELECT P3, P10, P50, P90, P97 FROM PADROES_CRESCIMENTO " .
				"WHERE TIPO = 'P' AND IDADE = ".$result[0]['M']["IDADE"]." AND SEXO = '".$result[0]['B']["SEXO"]."'";
		
		$result2 = $this->Graph->query($sql, $cachequeries = false);
		
		$p3 = $result2[0]['PADROES_CRESCIMENTO']["P3"];
		$p10 = $result2[0]['PADROES_CRESCIMENTO']["P10"];
		$p50 = $result2[0]['PADROES_CRESCIMENTO']["P50"];
		$p90 = $result2[0]['PADROES_CRESCIMENTO']["P90"];
		$p97 = $result2[0]['PADROES_CRESCIMENTO']["P97"];
		
		$peso = $result[0]['M']["PESO"];
		
		if ($peso < $p3) {
			$statusPeso = -2;
		} else if ($peso < $p10) {
			$statusPeso = -1;
		} else if ($peso >= $p97) {
			$statusPeso = 1;
		} else {
			$statusPeso = 0;
		}
		
		$this->set('statusPeso', $statusPeso);

		$sql = "SELECT P3, P10, P50, P90, P97 FROM PADROES_CRESCIMENTO " .
				"WHERE TIPO = 'A' AND IDADE = ".$result[0]['M']["IDADE"]." AND SEXO = '".$result[0]['B']["SEXO"]."'";
		
		$result2 = $this->Graph->query($sql, $cachequeries = false);
		
		$p3 = $result2[0]['PADROES_CRESCIMENTO']["P3"];
		$p10 = $result2[0]['PADROES_CRESCIMENTO']["P10"];
		$p50 = $result2[0]['PADROES_CRESCIMENTO']["P50"];
		$p90 = $result2[0]['PADROES_CRESCIMENTO']["P90"];
		$p97 = $result2[0]['PADROES_CRESCIMENTO']["P97"];
		
		$altura = $result[0]['M']["ALTURA"];
				
		if ($altura < $p3) {
			$statusAltura = -2;
		} else if ($altura < $p10) {
			$statusAltura = -1;
		} else if ($altura >= $p97) {
			$statusAltura = 1;
		} else {
			$statusAltura = 0;
		}
		
		$this->set('statusAltura', $statusAltura);
	}
	
	/*
	 Retornos poss�veis:
	0: Peso adequado;
	-1: Risco nutricional;
	-2: Abaixo do peso (ou desnutri��o);
	+1: Sobrepeso.
	*/
	public function getStatusPeso($id_bebe) {
		return getStatusBebe($id_bebe, "P");
	}
	
	/*
	 Retornos poss�veis:
	0: Altura adequada;
	-1: Risco para altura baixa;
	-2: Altura baixa;
	+1: Altura elevada.
	*/
	public function getStatusAltura($id_bebe) {
		return getStatusBebe($id_bebe, "A");
	}
	
	
	private function getStatusBebe($id_bebe, $tipo) {
		$sql = "SELECT M.ALTURA, M.PESO, M.IDADE, B.SEXO " .
				"FROM MEDICOES M " .
				"JOIN BEBES B ON M.BEBE = B.ID ".
				"WHERE B.ID = $id_bebe ORDER BY M.DATA DESC LIMIT 1";
		$result = $this->query($sql, $cachequeries = false);
		$altura = $result["ALTURA"];
		$peso = $result["PESO"];
		$idade = $result["IDADE"];
		$sexo = $result["SEXO"];
	
		$sql = "SELECT P3, P10, P50, P90, P97 " .
				"FROM PADROES_CRESCIMENTO " .
				"WHERE TIPO = $tipo AND IDADE = $idade AND SEXO = $sexo";
		$result = $this->query($sql, $cachequeries = false);
		$p3 = $result["P3"];
		$p10 = $result["P10"];
		$p50 = $result["P50"];
		$p90 = $result["P90"];
		$p97 = $result["P97"];
	
		if ($tipo == "P") {
			if ($peso < $p3) {
				return -2;
			} else if ($peso < $p10) {
				return -1;
			} else if ($peso >= 97) {
				return 1;
			} else {
				return 0;
			}
		} else {
			if ($altura < $p3) {
				return -2;
			} else if ($altura < $p10) {
				return -1;
			} else if ($altura >= 97) {
				return 1;
			} else {
				return 0;
			}
		}
	}
	
	/* Retorna a idade da criança em meses, calculando a diferen�a
	 da data de medição com a data de nascimento da criança */
	public function calculaIdadeEmMeses($id_bebe, $data_medicao) {
		$sql = "SELECT NASCIMENTO FROM BEBES WHERE ID = $id_bebe";
		$result = $this->query($sql, $cachequeries = false);
		$nascimento = $result["NASCIMENTO"];
	
		$ano_nas = date('Y', $nascimento);
		$mes_nas = date('m', $nascimento);
		$dia_nas = date('d', $nascimento);
	
		$ano_med = date('Y', $data_medicao);
		$mes_med = date('m', $data_medicao);
		$dia_med = date('d', $data_medicao);
	
		$qtd_meses = ($ano_med - $ano_nas) * 12;
		$qtd_meses += ($mes_med - $mes_nas);
		if ($dia_med < $dia_nas) {
			$qtd_meses -= 1;
		}
		return $qtd_meses;
	}

}
